using System;
using System.Collections.Generic;
using System.Text;

namespace InfiniTec.Security
{
    /// <summary>
    /// The <see cref="ImpersonationScope.Impersonate"/> method attempts to log a user on to the local 
    /// computer. The local computer is the computer from which <see cref="ImpersonationScope.Impersonate"/> 
    /// was called.
    /// </summary>
    public enum LogonType : int
    {
        /// <summary>
        /// Invalid logon type
        /// </summary>
        None = 0,
        /// <summary>
        /// This logon type is intended for users who will be interactively using the computer, 
        /// such as a user being logged on by a terminal server, remote shell, or similar process. 
        /// This logon type has the additional expense of caching logon information for disconnected 
        /// operations; therefore, it is inappropriate for some client/server applications, 
        /// such as a mail server.
        /// </summary>
        Interactive = 2,
        /// <summary>
        /// This logon type is intended for high performance servers to authenticate plaintext passwords.
        /// The LogonUser function does not cache credentials for this logon type.
        /// </summary>
        Network = 3,
        /// <summary>
        /// This logon type is intended for batch servers, where processes may be executing 
        /// on behalf of a user without their direct intervention. This type is also for higher 
        /// performance servers that process many plaintext authentication attempts at a time, 
        /// such as mail or Web servers. The LogonUser function does not cache credentials for 
        /// this logon type.
        /// </summary>
        Batch = 4,
        /// <summary>
        /// This logon type preserves the name and password in the authentication package, 
        /// which allows the server to make connections to other network servers while impersonating 
        /// the client. A server can accept plaintext credentials from a client, call LogonUser, verify 
        /// that the user can access the system across the network, and still communicate with other servers.
        /// </summary>
        /// <remarks>This option requires Windows 2000 or later.</remarks>
        NetworkClearText = 8,
        /// <summary>
        /// This logon type allows the caller to clone its current token and specify new credentials for
        /// outbound connections. The new logon session has the same local identifier but uses different
        /// credentials for other network connections. 
        /// </summary>
        /// <remarks>This option requires Windows 2000 or later.</remarks>
        NewCredentials = 9
    }
}
